package com.ym.medical.service;

import com.alibaba.fastjson.JSONObject;
import com.ym.medical.domain.bo.pay.WxApplyPaySign;
import com.ym.medical.domain.bo.pay.WxOrderQueryRespData;
import com.ym.medical.domain.bo.pay.WxRefundQueryRespData;
import com.ym.medical.domain.entity.InquiryOrderEntity;
import com.ym.medical.domain.entity.PersonalTransactionOrderEntity;
import com.ym.medical.domain.param.OrderParam;
import com.ym.medical.domain.vo.MindListMobileVO;
import com.ym.medical.enums.ConsumeDetailsTdTypeEnum;


/**
 * 订单支付相关
 *
 * @author: 李涛
 * @version: 2019年07月11日 16:16
 */
public interface IOrderPaySV {
    /**
     * 微信问诊订单退费申请
     *
     * @param orderModel
     * @return
     */
    JSONObject refundOrder(OrderParam orderModel);


    /**
     * 微信支付申请
     *
     * @param orderModel
     * @return
     */
    WxApplyPaySign.SignData payApply(OrderParam orderModel);

    /**
     * 微信支付回调问诊订单
     *
     * @param order
     */
    void wxPayOrder(InquiryOrderEntity order) throws Exception;

    /**
     * 退款回调修改订单信息
     *
     * @param order
     */
    void wxrefundOrder(InquiryOrderEntity order);

    /**
     * 送心意回调接口
     *
     * @param ioNum
     */
    void mindOrder(String ioNum);

    /**
     * 充值回调接口
     *
     * @param orderModel
     */
    void rechargeCallBack(OrderParam orderModel);

    /**
     * 订单余额支付
     *
     * @param orderModel
     */
    void accountPay(OrderParam orderModel) throws Exception;


    /**
     * 微信提现申请
     *
     * @param outTradeNo
     */
    void withdraw(String outTradeNo);

    /**
     * 微信查询问诊订单支付
     *
     * @param ioNum
     * @param tdTypeEnum 交易类型
     * @return
     */
    WxOrderQueryRespData orderPayQuery(String ioNum, ConsumeDetailsTdTypeEnum tdTypeEnum);

    /**
     * 微信查询问诊订单退费
     *
     * @param ioNum
     * @return
     */
    WxRefundQueryRespData refundOrderQuery(String ioNum);

    /**
     * 微信支付成功修改问诊订单信息
     *
     * @param order
     * @throws Exception
     */
    void updateOrderInfo(InquiryOrderEntity order, String otherBillTdNo) throws Exception;

    /**
     * 申诉订单退费回调
     *
     * @param order
     */
    void complainOrderRefundCallback(InquiryOrderEntity order);

    /**
     * 微信支付成功修改送心意订单信息
     */
    void updateMindOrder(MindListMobileVO mindModel, String otherBillTdNo);

    /**
     * 微信支付成功修改充值(提现)订单信息
     *
     * @param personalTransactionOrder
     */
    void updateRechargeOrder(PersonalTransactionOrderEntity personalTransactionOrder, String otherBillTdNo);

    /**
     * 微信退款成功修改订单状态
     *
     * @param order
     * @param otherBillTdNo
     */
    void wxrefundUpdateOrderInfo(InquiryOrderEntity order, String otherBillTdNo);

    /**
     * 微信申诉退款成功修改订单状态
     *
     * @param order
     * @param otherBillTdNo
     */
    void complainOrderRefund(InquiryOrderEntity order, String otherBillTdNo);

    /**
     * 提现交易回调
     * @param ioNum
     */
    void withdrawCallBack(String ioNum);
}
